from PIL import Image, ImageDraw, ImageFont
import os

def get_available_fonts(font_size):
    """获取系统中可能可用的中文字体列表"""
    fonts = []
    
    # Windows 常见中文字体
    windows_fonts = [
        'simsun.ttc',          # 宋体
        'simhei.ttf',          # 黑体
        'msyh.ttc',            # 微软雅黑
        'microsoft yahei.ttf', # 微软雅黑
        'simkai.ttf',          # 楷体
        'siminwei.ttf'         # 微软魏碑
    ]
    fonts.extend([f"C:/Windows/Fonts/{font}" for font in windows_fonts])
    
    # macOS 常见中文字体
    mac_fonts = [
        'PingFang.ttc',        # 苹方
        'Heiti TC',            # 黑体
        'Songti TC'            # 宋体
    ]
    fonts.extend([f"/System/Library/Fonts/{font}" for font in mac_fonts])
    
    # Linux 常见中文字体
    linux_fonts = [
        'simhei.ttf', 
        'simsun.ttc',
        'wqy-zenhei.ttc'
    ]
    fonts.extend([f"/usr/share/fonts/truetype/{font}" for font in linux_fonts])
    
    # 过滤存在的字体文件
    available_fonts = []
    for font_path in fonts:
        if os.path.exists(font_path):
            available_fonts.append(font_path)
    
    # 添加默认字体作为最后的备选
    available_fonts.append(None)
    
    return available_fonts

def text_to_stars(text, font_size=24, star_char='*', space_char=' '):
    """将中文文本转换为星号图案，优化显示完整性"""
    # 计算合适的图像尺寸，增加边距避免文字被截断
    margin = 5
    img_width = font_size * len(text) + margin * 2
    img_height = font_size + margin * 2
    
    # 创建图像
    image = Image.new('L', (img_width, img_height), 255)  # 白色背景
    draw = ImageDraw.Draw(image)
    
    # 尝试加载可用的中文字体
    available_fonts = get_available_fonts(font_size)
    font = None
    
    for font_path in available_fonts:
        try:
            if font_path:
                font = ImageFont.truetype(font_path, font_size)
            else:
                font = ImageFont.load_default()
            break  # 找到可用字体就停止尝试
        except:
            continue
    
    if not font:
        print("警告：无法加载任何字体，使用默认字体")
        font = ImageFont.load_default()
    
    # 绘制文本，增加边距确保完整显示
    draw.text((margin, margin), text, font=font, fill=0)  # 黑色文字
    
    # 转换为星号图案
    star_pattern = []
    width, height = image.size
    
    for y in range(height):
        line = []
        for x in range(width):
            # 获取像素值，0为黑色（需要显示），255为白色（空白）
            pixel = image.getpixel((x, y))
            line.append(star_char if pixel < 128 else space_char)
        
        # 处理行
        line_str = ''.join(line).strip()
        if line_str:  # 只保留非空行
            star_pattern.append(line_str)
    
    return star_pattern

def print_star_pattern(pattern):
    """打印星号图案"""
    for line in pattern:
        print(line)

if __name__ == "__main__":
    # 输入要转换的中文
    chinese_tetx = input("请输入要转换的中文: ")
    
    # 可以尝试调整字体大小获得更好的效果
    # 字体越大，细节越丰富，但图案也会越长
    star_pattern = text_to_stars(
        chinese_text,
        font_size=28,  # 适当增大字体大小可能会显示更完整
        star_char='*'
    )
    
    # 打印结果
    print("\n转换结果:")
    print_star_pattern(star_pattern)
